package com.itheima.interface1; // 包声明，指定当前类所在的位置，com.itheima.interface1是包路径

public class Test { // 定义一个公开的测试类Test，用于演示接口的使用
    public static void main(String[] args) { // 程序的入口方法，所有Java程序都从这里开始执行
        // 目标：认识接口，搞清楚接口的特点，基本使用. // 注释说明本示例的学习目标
        System.out.println(A.SCHOOL_NAME); // 直接通过接口名访问接口中的常量，这是接口常量的使用方式
        // 注意：接口不能创建对象。 // 注释说明接口的一个重要特点：不能实例化
        // 接口是用来被类实现的。 // 注释说明接口的主要用途：被类实现
        C c = new C(); // 创建实现类C的对象，接口不能直接创建对象，但可以创建实现类的对象
        c.run(); // 调用实现类对象的run方法，这个方法是从接口A实现而来的
        System.out.println(c.go()); // 调用实现类对象的go方法，并输出其返回值
        c.play(); // 调用实现类对象的play方法，这个方法是从接口B实现而来的
    } // main方法结束
} // Test类结束

// C被称为实现类。同时实现了多个接口。 // 注释说明C类的身份和特点
// 实现类实现多个接口，必须重写完全部接口的全部抽象方法，否则这个类必须定义成抽象类 // 注释说明实现接口的规则
class C implements B, A{ // 定义类C，使用implements关键字同时实现接口B和接口A，这体现了Java的多实现特性

    @Override // 注解，表示下面的方法是重写接口中的抽象方法
    public void run() { // 重写接口A中的run方法，提供具体实现
        System.out.println("C类重写了run方法"); // 方法的具体实现：输出一条消息
    }

    @Override // 注解，表示下面的方法是重写接口中的抽象方法
    public String go() { // 重写接口A中的go方法，返回值类型是String
        return "黑马找磊哥！"; // 方法的具体实现：返回一个字符串
    }

    @Override // 注解，表示下面的方法是重写接口中的抽象方法
    public void play() { // 重写接口B中的play方法，提供具体实现
        System.out.println("C类重写了play方法"); // 方法的具体实现：输出一条消息
    }
} // 类C结束